'''
在说到 List 和 Tuple 的不同之前先来说下 List 和 Tuple 的相同点吧，
它们在 Python 中都是序列类型的容器对象，可以支持任何类型的数据存放、
也同样支持切片和迭代等操作。
'''

list1 = [1,2,3,4,5]
print(list1[0:2])  # [1, 2]
tuple1 = (1,2,3,4,5)
print(tuple1[0:2]) # (1, 2)


'''
列表是可变的，长度大小不固定，可以进行增删改等一系列操作。
而元组是不可变的。大小固定，不可以进行增删改操作。
你可以试着将一个元组重新赋值之后使用 id () 函数分别查看下新的元组和旧的元组在内存中的地址就知道了。
'''

a = (1,2,3,4)
print(id(a)) # 61050288
a = (1,2,3,4)
print(id(a)) # 61050288


'''
* 因为元组的不可变性，所以元组无法复制。

* 可以使用元组作为字典的键，但是列表不可以。
'''

a = (1,2)
b = [1,2]
c = {a:'元组'} # 正确
# c = {b:'列表'} # 错误


'''
在两者的性能方面，Python 会将低开销的较大的块分配给元组，因为它们是不可变的。 
对于列表则分配小内存块。 与列表相比，元组所支持的操作更少所以会更快一些。
'''

a = [1,2,3]
b = (1,2,3)
print(a.__sizeof__()) # 64
print(b.__sizeof__()) # 48